// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Play Movies Partner API Version v1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://developers.google.com/playmoviespartner/'>Google Play Movies Partner API</a>
 *      <tr><th>API Version<td>v1
 *      <tr><th>API Rev<td>20170313 (802)
 *      <tr><th>API Docs
 *          <td><a href='https://developers.google.com/playmoviespartner/'>
 *              https://developers.google.com/playmoviespartner/</a>
 *      <tr><th>Discovery Name<td>playmoviespartner
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Play Movies Partner API can be found at
 * <a href='https://developers.google.com/playmoviespartner/'>https://developers.google.com/playmoviespartner/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.PlayMovies.v1
{
    /// <summary>The PlayMovies Service.</summary>
    public class PlayMoviesService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public PlayMoviesService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public PlayMoviesService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            accounts = new AccountsResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "playmoviespartner"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://playmoviespartner.googleapis.com/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return ""; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google Play Movies Partner API.</summary>
        public class Scope
        {
            /// <summary>View the digital assets you publish on Google Play Movies and TV</summary>
            public static string PlaymoviesPartnerReadonly = "https://www.googleapis.com/auth/playmovies_partner.readonly";

        }



        private readonly AccountsResource accounts;

        /// <summary>Gets the Accounts resource.</summary>
        public virtual AccountsResource Accounts
        {
            get { return accounts; }
        }
    }

    ///<summary>A base abstract class for PlayMovies requests.</summary>
    public abstract class PlayMoviesBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new PlayMoviesBaseServiceRequest instance.</summary>
        protected PlayMoviesBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>V1 error format.</summary>
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }

        /// <summary>V1 error format.</summary>
        public enum XgafvEnum
        {
            /// <summary>v1 error format</summary>
            [Google.Apis.Util.StringValueAttribute("1")]
            Value1,
            /// <summary>v2 error format</summary>
            [Google.Apis.Util.StringValueAttribute("2")]
            Value2,
        }

        /// <summary>OAuth access token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// <summary>Data format for response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
            /// <summary>Media download with context-dependent Content-Type</summary>
            [Google.Apis.Util.StringValueAttribute("media")]
            Media,
            /// <summary>Responses with Content-Type of application/x-protobuf</summary>
            [Google.Apis.Util.StringValueAttribute("proto")]
            Proto,
        }

        /// <summary>OAuth bearer token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("bearer_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string BearerToken { get; set; }

        /// <summary>JSONP</summary>
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Pretty-print response.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("pp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> Pp { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// <summary>Initializes PlayMovies parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "$.xgafv", new Google.Apis.Discovery.Parameter
                {
                    Name = "$.xgafv",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "access_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "access_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "bearer_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "bearer_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "callback", new Google.Apis.Discovery.Parameter
                {
                    Name = "callback",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "pp", new Google.Apis.Discovery.Parameter
                {
                    Name = "pp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "uploadType", new Google.Apis.Discovery.Parameter
                {
                    Name = "uploadType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "upload_protocol", new Google.Apis.Discovery.Parameter
                {
                    Name = "upload_protocol",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "accounts" collection of methods.</summary>
    public class AccountsResource
    {
        private const string Resource = "accounts";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public AccountsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            avails = new AvailsResource(service);
            orders = new OrdersResource(service);
            storeInfos = new StoreInfosResource(service);

        }

        private readonly AvailsResource avails;

        /// <summary>Gets the Avails resource.</summary>
        public virtual AvailsResource Avails
        {
            get { return avails; }
        }

        /// <summary>The "avails" collection of methods.</summary>
        public class AvailsResource
        {
            private const string Resource = "avails";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public AvailsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Get an Avail given its avail group id and avail id.</summary>
            /// <param name="accountId">REQUIRED. See _General rules_ for more information about this field.</param>
            /// <param
            /// name="availId">REQUIRED. Avail ID.</param>
            public virtual GetRequest Get(string accountId, string availId)
            {
                return new GetRequest(service, accountId, availId);
            }

            /// <summary>Get an Avail given its avail group id and avail id.</summary>
            public class GetRequest : PlayMoviesBaseServiceRequest<Google.Apis.PlayMovies.v1.Data.Avail>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string accountId, string availId)
                    : base(service)
                {
                    AccountId = accountId;
                    AvailId = availId;
                    InitParameters();
                }


                /// <summary>REQUIRED. See _General rules_ for more information about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string AccountId { get; private set; }

                /// <summary>REQUIRED. Avail ID.</summary>
                [Google.Apis.Util.RequestParameterAttribute("availId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string AvailId { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/accounts/{accountId}/avails/{availId}"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "accountId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "accountId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "availId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "availId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>List Avails owned or managed by the partner.
            ///
            /// See _Authentication and Authorization rules_ and _List methods rules_ for more information about this
            /// method.</summary>
            /// <param name="accountId">REQUIRED. See _General rules_ for more information about this field.</param>
            public virtual ListRequest List(string accountId)
            {
                return new ListRequest(service, accountId);
            }

            /// <summary>List Avails owned or managed by the partner.
            ///
            /// See _Authentication and Authorization rules_ and _List methods rules_ for more information about this
            /// method.</summary>
            public class ListRequest : PlayMoviesBaseServiceRequest<Google.Apis.PlayMovies.v1.Data.ListAvailsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string accountId)
                    : base(service)
                {
                    AccountId = accountId;
                    InitParameters();
                }


                /// <summary>REQUIRED. See _General rules_ for more information about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string AccountId { get; private set; }

                /// <summary>Filter Avails that match a case-insensitive, partner-specific custom id. NOTE: this field
                /// is deprecated and will be removed on V2; `alt_ids` should be used instead.</summary>
                [Google.Apis.Util.RequestParameterAttribute("altId", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string AltId { get; set; }

                /// <summary>See _List methods rules_ for info about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("studioNames", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> StudioNames { get; set; }

                /// <summary>Filter Avails that match (case-insensitive) any of the given country codes, using the "ISO
                /// 3166-1 alpha-2" format (examples: "US", "us", "Us").</summary>
                [Google.Apis.Util.RequestParameterAttribute("territories", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> Territories { get; set; }

                /// <summary>Filter that matches Avails with a `title_internal_alias`, `series_title_internal_alias`,
                /// `season_title_internal_alias`, or `episode_title_internal_alias` that contains the given case-
                /// insensitive title.</summary>
                [Google.Apis.Util.RequestParameterAttribute("title", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Title { get; set; }

                /// <summary>See _List methods rules_ for info about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>Filter Avails that match any of the given `video_id`s.</summary>
                [Google.Apis.Util.RequestParameterAttribute("videoIds", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> VideoIds { get; set; }

                /// <summary>See _List methods rules_ for info about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }

                /// <summary>Filter Avails that match (case-insensitive) any of the given partner-specific custom
                /// ids.</summary>
                [Google.Apis.Util.RequestParameterAttribute("altIds", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> AltIds { get; set; }

                /// <summary>See _List methods rules_ for info about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pphNames", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> PphNames { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/accounts/{accountId}/avails"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "accountId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "accountId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "altId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "altId",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "studioNames", new Google.Apis.Discovery.Parameter
                        {
                            Name = "studioNames",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "territories", new Google.Apis.Discovery.Parameter
                        {
                            Name = "territories",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "title", new Google.Apis.Discovery.Parameter
                        {
                            Name = "title",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "videoIds", new Google.Apis.Discovery.Parameter
                        {
                            Name = "videoIds",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "altIds", new Google.Apis.Discovery.Parameter
                        {
                            Name = "altIds",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pphNames", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pphNames",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }
        private readonly OrdersResource orders;

        /// <summary>Gets the Orders resource.</summary>
        public virtual OrdersResource Orders
        {
            get { return orders; }
        }

        /// <summary>The "orders" collection of methods.</summary>
        public class OrdersResource
        {
            private const string Resource = "orders";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public OrdersResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Get an Order given its id.
            ///
            /// See _Authentication and Authorization rules_ and _Get methods rules_ for more information about this
            /// method.</summary>
            /// <param name="accountId">REQUIRED. See _General rules_ for more information about this field.</param>
            /// <param
            /// name="orderId">REQUIRED. Order ID.</param>
            public virtual GetRequest Get(string accountId, string orderId)
            {
                return new GetRequest(service, accountId, orderId);
            }

            /// <summary>Get an Order given its id.
            ///
            /// See _Authentication and Authorization rules_ and _Get methods rules_ for more information about this
            /// method.</summary>
            public class GetRequest : PlayMoviesBaseServiceRequest<Google.Apis.PlayMovies.v1.Data.Order>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string accountId, string orderId)
                    : base(service)
                {
                    AccountId = accountId;
                    OrderId = orderId;
                    InitParameters();
                }


                /// <summary>REQUIRED. See _General rules_ for more information about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string AccountId { get; private set; }

                /// <summary>REQUIRED. Order ID.</summary>
                [Google.Apis.Util.RequestParameterAttribute("orderId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string OrderId { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/accounts/{accountId}/orders/{orderId}"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "accountId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "accountId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "orderId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "orderId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>List Orders owned or managed by the partner.
            ///
            /// See _Authentication and Authorization rules_ and _List methods rules_ for more information about this
            /// method.</summary>
            /// <param name="accountId">REQUIRED. See _General rules_ for more information about this field.</param>
            public virtual ListRequest List(string accountId)
            {
                return new ListRequest(service, accountId);
            }

            /// <summary>List Orders owned or managed by the partner.
            ///
            /// See _Authentication and Authorization rules_ and _List methods rules_ for more information about this
            /// method.</summary>
            public class ListRequest : PlayMoviesBaseServiceRequest<Google.Apis.PlayMovies.v1.Data.ListOrdersResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string accountId)
                    : base(service)
                {
                    AccountId = accountId;
                    InitParameters();
                }


                /// <summary>REQUIRED. See _General rules_ for more information about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string AccountId { get; private set; }

                /// <summary>Filter that matches Orders with a `name`, `show`, `season` or `episode` that contains the
                /// given case-insensitive name.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Name { get; set; }

                /// <summary>See _List methods rules_ for info about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("studioNames", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> StudioNames { get; set; }

                /// <summary>See _List methods rules_ for info about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>Filter Orders that match any of the given `video_id`s.</summary>
                [Google.Apis.Util.RequestParameterAttribute("videoIds", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> VideoIds { get; set; }

                /// <summary>Filter Orders that match a case-insensitive, partner-specific custom id.</summary>
                [Google.Apis.Util.RequestParameterAttribute("customId", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string CustomId { get; set; }

                /// <summary>See _List methods rules_ for info about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }

                /// <summary>See _List methods rules_ for info about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pphNames", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> PphNames { get; set; }

                /// <summary>Filter Orders that match one of the given status.</summary>
                [Google.Apis.Util.RequestParameterAttribute("status", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<StatusEnum> Status { get; set; }

                /// <summary>Filter Orders that match one of the given status.</summary>
                public enum StatusEnum
                {
                    [Google.Apis.Util.StringValueAttribute("STATUS_UNSPECIFIED")]
                    STATUSUNSPECIFIED,
                    [Google.Apis.Util.StringValueAttribute("STATUS_APPROVED")]
                    STATUSAPPROVED,
                    [Google.Apis.Util.StringValueAttribute("STATUS_FAILED")]
                    STATUSFAILED,
                    [Google.Apis.Util.StringValueAttribute("STATUS_PROCESSING")]
                    STATUSPROCESSING,
                    [Google.Apis.Util.StringValueAttribute("STATUS_UNFULFILLED")]
                    STATUSUNFULFILLED,
                    [Google.Apis.Util.StringValueAttribute("STATUS_NOT_AVAILABLE")]
                    STATUSNOTAVAILABLE,
                }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/accounts/{accountId}/orders"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "accountId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "accountId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "studioNames", new Google.Apis.Discovery.Parameter
                        {
                            Name = "studioNames",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "videoIds", new Google.Apis.Discovery.Parameter
                        {
                            Name = "videoIds",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "customId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "customId",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pphNames", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pphNames",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "status", new Google.Apis.Discovery.Parameter
                        {
                            Name = "status",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }
        private readonly StoreInfosResource storeInfos;

        /// <summary>Gets the StoreInfos resource.</summary>
        public virtual StoreInfosResource StoreInfos
        {
            get { return storeInfos; }
        }

        /// <summary>The "storeInfos" collection of methods.</summary>
        public class StoreInfosResource
        {
            private const string Resource = "storeInfos";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public StoreInfosResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;
                country = new CountryResource(service);

            }

            private readonly CountryResource country;

            /// <summary>Gets the Country resource.</summary>
            public virtual CountryResource Country
            {
                get { return country; }
            }

            /// <summary>The "country" collection of methods.</summary>
            public class CountryResource
            {
                private const string Resource = "country";

                /// <summary>The service which this resource belongs to.</summary>
                private readonly Google.Apis.Services.IClientService service;

                /// <summary>Constructs a new resource.</summary>
                public CountryResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;

                }


                /// <summary>Get a StoreInfo given its video id and country.
                ///
                /// See _Authentication and Authorization rules_ and _Get methods rules_ for more information about this
                /// method.</summary>
                /// <param name="accountId">REQUIRED. See _General rules_ for more information about this field.</param>
                /// <param
                /// name="videoId">REQUIRED. Video ID.</param>
                /// <param name="country">REQUIRED. Edit country.</param>
                public virtual GetRequest Get(string accountId, string videoId, string country)
                {
                    return new GetRequest(service, accountId, videoId, country);
                }

                /// <summary>Get a StoreInfo given its video id and country.
                ///
                /// See _Authentication and Authorization rules_ and _Get methods rules_ for more information about this
                /// method.</summary>
                public class GetRequest : PlayMoviesBaseServiceRequest<Google.Apis.PlayMovies.v1.Data.StoreInfo>
                {
                    /// <summary>Constructs a new Get request.</summary>
                    public GetRequest(Google.Apis.Services.IClientService service, string accountId, string videoId, string country)
                        : base(service)
                    {
                        AccountId = accountId;
                        VideoId = videoId;
                        Country = country;
                        InitParameters();
                    }


                    /// <summary>REQUIRED. See _General rules_ for more information about this field.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string AccountId { get; private set; }

                    /// <summary>REQUIRED. Video ID.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("videoId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string VideoId { get; private set; }

                    /// <summary>REQUIRED. Edit country.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("country", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Country { get; private set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "get"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1/accounts/{accountId}/storeInfos/{videoId}/country/{country}"; }
                    }

                    /// <summary>Initializes Get parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "accountId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "accountId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "videoId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "videoId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "country", new Google.Apis.Discovery.Parameter
                            {
                                Name = "country",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }
            }

            /// <summary>List StoreInfos owned or managed by the partner.
            ///
            /// See _Authentication and Authorization rules_ and _List methods rules_ for more information about this
            /// method.</summary>
            /// <param name="accountId">REQUIRED. See _General rules_ for more information about this field.</param>
            public virtual ListRequest List(string accountId)
            {
                return new ListRequest(service, accountId);
            }

            /// <summary>List StoreInfos owned or managed by the partner.
            ///
            /// See _Authentication and Authorization rules_ and _List methods rules_ for more information about this
            /// method.</summary>
            public class ListRequest : PlayMoviesBaseServiceRequest<Google.Apis.PlayMovies.v1.Data.ListStoreInfosResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string accountId)
                    : base(service)
                {
                    AccountId = accountId;
                    InitParameters();
                }


                /// <summary>REQUIRED. See _General rules_ for more information about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string AccountId { get; private set; }

                /// <summary>Filter StoreInfos that match any of the given `season_id`s.</summary>
                [Google.Apis.Util.RequestParameterAttribute("seasonIds", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> SeasonIds { get; set; }

                /// <summary>Filter StoreInfos that match any of the given `video_id`s.</summary>
                [Google.Apis.Util.RequestParameterAttribute("videoIds", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> VideoIds { get; set; }

                /// <summary>Filter StoreInfos that match a given `video_id`. NOTE: this field is deprecated and will be
                /// removed on V2; `video_ids` should be used instead.</summary>
                [Google.Apis.Util.RequestParameterAttribute("videoId", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string VideoId { get; set; }

                /// <summary>See _List methods rules_ for info about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>See _List methods rules_ for info about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }

                /// <summary>Filter StoreInfos that match any of the given `mid`s.</summary>
                [Google.Apis.Util.RequestParameterAttribute("mids", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> Mids { get; set; }

                /// <summary>See _List methods rules_ for info about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pphNames", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> PphNames { get; set; }

                /// <summary>Filter StoreInfos that match (case-insensitive) any of the given country codes, using the
                /// "ISO 3166-1 alpha-2" format (examples: "US", "us", "Us").</summary>
                [Google.Apis.Util.RequestParameterAttribute("countries", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> Countries { get; set; }

                /// <summary>See _List methods rules_ for info about this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("studioNames", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> StudioNames { get; set; }

                /// <summary>Filter that matches StoreInfos with a `name` or `show_name` that contains the given case-
                /// insensitive name.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Name { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/accounts/{accountId}/storeInfos"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "accountId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "accountId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "seasonIds", new Google.Apis.Discovery.Parameter
                        {
                            Name = "seasonIds",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "videoIds", new Google.Apis.Discovery.Parameter
                        {
                            Name = "videoIds",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "videoId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "videoId",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "mids", new Google.Apis.Discovery.Parameter
                        {
                            Name = "mids",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pphNames", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pphNames",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "countries", new Google.Apis.Discovery.Parameter
                        {
                            Name = "countries",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "studioNames", new Google.Apis.Discovery.Parameter
                        {
                            Name = "studioNames",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }
    }
}

namespace Google.Apis.PlayMovies.v1.Data
{    

    /// <summary>An Avail describes the Availability Window of a specific Edit in a given country, which means the
    /// period Google is allowed to sell or rent the Edit.
    ///
    /// Avails are exposed in EMA format Version 1.6b (available at http://www.movielabs.com/md/avails/)
    ///
    /// Studios can see the Avails for the Titles they own. Post-production houses cannot see any Avails.</summary>
    public class Avail : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Other identifier referring to the Edit, as defined by partner. Example: "GOOGLER_2006"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("altId")]
        public virtual string AltId { get; set; } 

        /// <summary>ID internally generated by Google to uniquely identify an Avail. Not part of EMA Specs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("availId")]
        public virtual string AvailId { get; set; } 

        /// <summary>Communicating an exempt category as defined by FCC regulations. It is not required for non-US
        /// Avails. Example: "1"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("captionExemption")]
        public virtual string CaptionExemption { get; set; } 

        /// <summary>Communicating if caption file will be delivered.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("captionIncluded")]
        public virtual System.Nullable<bool> CaptionIncluded { get; set; } 

        /// <summary>Title Identifier. This should be the Title Level EIDR. Example: "10.5240/1489-49A2-3956-4B2D-
        /// FE16-5".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentId")]
        public virtual string ContentId { get; set; } 

        /// <summary>The name of the studio that owns the Edit referred in the Avail. This is the equivalent of
        /// `studio_name` in other resources, but it follows the EMA nomenclature. Example: "Google Films".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>Manifestation Identifier. This should be the Manifestation Level EIDR. Example:
        /// "10.2340/1489-49A2-3956-4B2D-FE16-7"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("encodeId")]
        public virtual string EncodeId { get; set; } 

        /// <summary>End of term in YYYY-MM-DD format in the timezone of the country of the Avail. "Open" if no end date
        /// is available. Example: "2019-02-17"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual string End { get; set; } 

        /// <summary>Other identifier referring to the episode, as defined by partner. Only available on TV avails.
        /// Example: "rs_googlers_s1_3".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("episodeAltId")]
        public virtual string EpisodeAltId { get; set; } 

        /// <summary>The number assigned to the episode within a season. Only available on TV Avails. Example:
        /// "3".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("episodeNumber")]
        public virtual string EpisodeNumber { get; set; } 

        /// <summary>OPTIONAL.TV Only. Title used by involved parties to refer to this episode. Only available on TV
        /// Avails. Example: "Coding at Google".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("episodeTitleInternalAlias")]
        public virtual string EpisodeTitleInternalAlias { get; set; } 

        /// <summary>Indicates the format profile covered by the transaction.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formatProfile")]
        public virtual string FormatProfile { get; set; } 

        /// <summary>Type of transaction.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("licenseType")]
        public virtual string LicenseType { get; set; } 

        /// <summary>Name of the post-production houses that manage the Avail. Not part of EMA Specs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pphNames")]
        public virtual System.Collections.Generic.IList<string> PphNames { get; set; } 

        /// <summary>Type of pricing that should be applied to this Avail based on how the partner classify them.
        /// Example: "Tier", "WSP", "SRP", or "Category".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("priceType")]
        public virtual string PriceType { get; set; } 

        /// <summary>Value to be applied to the pricing type. Example: "4" or "2.99"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("priceValue")]
        public virtual string PriceValue { get; set; } 

        /// <summary>Edit Identifier. This should be the Edit Level EIDR. Example: "10.2340/1489-49A2-3956-4B2D-
        /// FE16-6"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productId")]
        public virtual string ProductId { get; set; } 

        /// <summary>Value representing the rating reason. Rating reasons should be formatted as per [EMA ratings
        /// spec](http://www.movielabs.com/md/ratings/) and comma-separated for inclusion of multiple reasons. Example:
        /// "L, S, V"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ratingReason")]
        public virtual string RatingReason { get; set; } 

        /// <summary>Rating system applied to the version of title within territory of Avail. Rating systems should be
        /// formatted as per [EMA ratings spec](http://www.movielabs.com/md/ratings/) Example: "MPAA"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ratingSystem")]
        public virtual string RatingSystem { get; set; } 

        /// <summary>Value representing the rating. Ratings should be formatted as per
        /// http://www.movielabs.com/md/ratings/ Example: "PG"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ratingValue")]
        public virtual string RatingValue { get; set; } 

        /// <summary>Release date of the Title in earliest released territory. Typically it is just the year, but it is
        /// free-form as per EMA spec. Examples: "1979", "Oct 2014"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("releaseDate")]
        public virtual string ReleaseDate { get; set; } 

        /// <summary>Other identifier referring to the season, as defined by partner. Only available on TV avails.
        /// Example: "rs_googlers_s1".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("seasonAltId")]
        public virtual string SeasonAltId { get; set; } 

        /// <summary>The number assigned to the season within a series. Only available on TV Avails. Example:
        /// "1".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("seasonNumber")]
        public virtual string SeasonNumber { get; set; } 

        /// <summary>Title used by involved parties to refer to this season. Only available on TV Avails. Example:
        /// "Googlers, The".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("seasonTitleInternalAlias")]
        public virtual string SeasonTitleInternalAlias { get; set; } 

        /// <summary>Other identifier referring to the series, as defined by partner. Only available on TV avails.
        /// Example: "rs_googlers".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("seriesAltId")]
        public virtual string SeriesAltId { get; set; } 

        /// <summary>Title used by involved parties to refer to this series. Only available on TV Avails. Example:
        /// "Googlers, The".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("seriesTitleInternalAlias")]
        public virtual string SeriesTitleInternalAlias { get; set; } 

        /// <summary>Start of term in YYYY-MM-DD format in the timezone of the country of the Avail. Example:
        /// "2013-05-14".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual string Start { get; set; } 

        /// <summary>Spoken language of the intended audience. Language shall be encoded in accordance with RFC 5646.
        /// Example: "fr".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeLanguage")]
        public virtual string StoreLanguage { get; set; } 

        /// <summary>First date an Edit could be publically announced as becoming available at a specific future date in
        /// territory of Avail. *Not* the Avail start date or pre-order start date. Format is YYYY-MM-DD. Only available
        /// for pre-orders. Example: "2012-12-10"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("suppressionLiftDate")]
        public virtual string SuppressionLiftDate { get; set; } 

        /// <summary>ISO 3166-1 alpha-2 country code for the country or territory of this Avail. For Avails, we use
        /// Territory in lieu of Country to comply with EMA specifications. But please note that Territory and Country
        /// identify the same thing. Example: "US".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("territory")]
        public virtual string Territory { get; set; } 

        /// <summary>Title used by involved parties to refer to this content. Example: "Googlers, The". Only available
        /// on Movie Avails.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("titleInternalAlias")]
        public virtual string TitleInternalAlias { get; set; } 

        /// <summary>Google-generated ID identifying the video linked to this Avail, once delivered. Not part of EMA
        /// Specs. Example: 'gtry456_xc'</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("videoId")]
        public virtual string VideoId { get; set; } 

        /// <summary>Work type as enumerated in EMA.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workType")]
        public virtual string WorkType { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to the 'ListAvails' method.</summary>
    public class ListAvailsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>List of Avails that match the request criteria.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("avails")]
        public virtual System.Collections.Generic.IList<Avail> Avails { get; set; } 

        /// <summary>See _List methods rules_ for info about this field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>See _List methods rules_ for more information about this field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalSize")]
        public virtual System.Nullable<int> TotalSize { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to the 'ListOrders' method.</summary>
    public class ListOrdersResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>See _List methods rules_ for info about this field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>List of Orders that match the request criteria.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("orders")]
        public virtual System.Collections.Generic.IList<Order> Orders { get; set; } 

        /// <summary>See _List methods rules_ for more information about this field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalSize")]
        public virtual System.Nullable<int> TotalSize { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to the 'ListStoreInfos' method.</summary>
    public class ListStoreInfosResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>See 'List methods rules' for info about this field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>List of StoreInfos that match the request criteria.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeInfos")]
        public virtual System.Collections.Generic.IList<StoreInfo> StoreInfos { get; set; } 

        /// <summary>See _List methods rules_ for more information about this field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalSize")]
        public virtual System.Nullable<int> TotalSize { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An Order tracks the fulfillment of an Edit when delivered using the legacy, non-component-based
    /// delivery.
    ///
    /// Each Order is uniquely identified by an `order_id`, which is generated by Google.
    ///
    /// Externally, Orders can also be identified by partners using its `custom_id` (when provided).</summary>
    public class Order : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Timestamp when the Order was approved.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("approvedTime")]
        public virtual object ApprovedTime { get; set; } 

        /// <summary>YouTube Channel ID that should be used to fulfill the Order. Example: "UCRG64darCZhb".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("channelId")]
        public virtual string ChannelId { get; set; } 

        /// <summary>YouTube Channel Name that should be used to fulfill the Order. Example: "Google_channel".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("channelName")]
        public virtual string ChannelName { get; set; } 

        /// <summary>Countries where the Order is available, using the "ISO 3166-1 alpha-2" format (example:
        /// "US").</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("countries")]
        public virtual System.Collections.Generic.IList<string> Countries { get; set; } 

        /// <summary>ID that can be used to externally identify an Order. This ID is provided by partners when
        /// submitting the Avails. Example: 'GOOGLER_2006'</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customId")]
        public virtual string CustomId { get; set; } 

        /// <summary>Timestamp of the earliest start date of the Avails linked to this Order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("earliestAvailStartTime")]
        public virtual object EarliestAvailStartTime { get; set; } 

        /// <summary>Default Episode name, usually in the language of the country of origin. Only available for TV Edits
        /// Example: "Googlers, The - Pilot".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("episodeName")]
        public virtual string EpisodeName { get; set; } 

        /// <summary>Legacy Order priority, as defined by Google. Example: 'P0'</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("legacyPriority")]
        public virtual string LegacyPriority { get; set; } 

        /// <summary>Default Edit name, usually in the language of the country of origin. Example: "Googlers,
        /// The".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>A simpler representation of the priority.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("normalizedPriority")]
        public virtual string NormalizedPriority { get; set; } 

        /// <summary>ID internally generated by Google to uniquely identify an Order. Example: 'abcde12_x'</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("orderId")]
        public virtual string OrderId { get; set; } 

        /// <summary>Timestamp when the Order was created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("orderedTime")]
        public virtual object OrderedTime { get; set; } 

        /// <summary>Name of the post-production house that manages the Edit ordered.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pphName")]
        public virtual string PphName { get; set; } 

        /// <summary>Order priority, as defined by Google. The higher the value, the higher the priority. Example:
        /// 90</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("priority")]
        public virtual System.Nullable<double> Priority { get; set; } 

        /// <summary>Timestamp when the Order was fulfilled.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("receivedTime")]
        public virtual object ReceivedTime { get; set; } 

        /// <summary>Field explaining why an Order has been rejected. Example: "Trailer audio is 2ch mono, please re-
        /// deliver in stereo".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rejectionNote")]
        public virtual string RejectionNote { get; set; } 

        /// <summary>Default Season name, usually in the language of the country of origin. Only available for TV Edits
        /// Example: "Googlers, The - A Brave New World".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("seasonName")]
        public virtual string SeasonName { get; set; } 

        /// <summary>Default Show name, usually in the language of the country of origin. Only available for TV Edits
        /// Example: "Googlers, The".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("showName")]
        public virtual string ShowName { get; set; } 

        /// <summary>High-level status of the order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>Detailed status of the order</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("statusDetail")]
        public virtual string StatusDetail { get; set; } 

        /// <summary>Name of the studio that owns the Edit ordered.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("studioName")]
        public virtual string StudioName { get; set; } 

        /// <summary>Type of the Edit linked to the Order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>Google-generated ID identifying the video linked to this Order, once delivered. Example:
        /// 'gtry456_xc'.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("videoId")]
        public virtual string VideoId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Information about a playable sequence (video) associated with an Edit and available at the Google Play
    /// Store.
    ///
    /// Internally, each StoreInfo is uniquely identified by a `video_id` and `country`.
    ///
    /// Externally, Title-level EIDR or Edit-level EIDR, if provided, can also be used to identify a specific title or
    /// edit in a country.</summary>
    public class StoreInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Audio tracks available for this Edit.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("audioTracks")]
        public virtual System.Collections.Generic.IList<string> AudioTracks { get; set; } 

        /// <summary>Country where Edit is available in ISO 3166-1 alpha-2 country code. Example: "US".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; } 

        /// <summary>Edit-level EIDR ID. Example: "10.5240/1489-49A2-3956-4B2D-FE16-6".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("editLevelEidr")]
        public virtual string EditLevelEidr { get; set; } 

        /// <summary>The number assigned to the episode within a season. Only available on TV Edits. Example:
        /// "1".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("episodeNumber")]
        public virtual string EpisodeNumber { get; set; } 

        /// <summary>Whether the Edit has a 5.1 channel audio track.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hasAudio51")]
        public virtual System.Nullable<bool> HasAudio51 { get; set; } 

        /// <summary>Whether the Edit has a EST offer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hasEstOffer")]
        public virtual System.Nullable<bool> HasEstOffer { get; set; } 

        /// <summary>Whether the Edit has a HD offer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hasHdOffer")]
        public virtual System.Nullable<bool> HasHdOffer { get; set; } 

        /// <summary>Whether the Edit has info cards.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hasInfoCards")]
        public virtual System.Nullable<bool> HasInfoCards { get; set; } 

        /// <summary>Whether the Edit has a SD offer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hasSdOffer")]
        public virtual System.Nullable<bool> HasSdOffer { get; set; } 

        /// <summary>Whether the Edit has a VOD offer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hasVodOffer")]
        public virtual System.Nullable<bool> HasVodOffer { get; set; } 

        /// <summary>Timestamp when the Edit went live on the Store.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("liveTime")]
        public virtual object LiveTime { get; set; } 

        /// <summary>Knowledge Graph ID associated to this Edit, if available. This ID links the Edit to its knowledge
        /// entity, externally accessible at http://freebase.com. In the absense of Title EIDR or Edit EIDR, this ID
        /// helps link together multiple Edits across countries. Example: '/m/0ffx29'</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mid")]
        public virtual string Mid { get; set; } 

        /// <summary>Default Edit name, usually in the language of the country of origin. Example: "Googlers,
        /// The".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Name of the post-production houses that manage the Edit.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pphNames")]
        public virtual System.Collections.Generic.IList<string> PphNames { get; set; } 

        /// <summary>Google-generated ID identifying the season linked to the Edit. Only available for TV Edits.
        /// Example: 'ster23ex'</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("seasonId")]
        public virtual string SeasonId { get; set; } 

        /// <summary>Default Season name, usually in the language of the country of origin. Only available for TV Edits
        /// Example: "Googlers, The - A Brave New World".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("seasonName")]
        public virtual string SeasonName { get; set; } 

        /// <summary>The number assigned to the season within a show. Only available on TV Edits. Example:
        /// "1".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("seasonNumber")]
        public virtual string SeasonNumber { get; set; } 

        /// <summary>Google-generated ID identifying the show linked to the Edit. Only available for TV Edits. Example:
        /// 'et2hsue_x'</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("showId")]
        public virtual string ShowId { get; set; } 

        /// <summary>Default Show name, usually in the language of the country of origin. Only available for TV Edits
        /// Example: "Googlers, The".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("showName")]
        public virtual string ShowName { get; set; } 

        /// <summary>Name of the studio that owns the Edit ordered.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("studioName")]
        public virtual string StudioName { get; set; } 

        /// <summary>Subtitles available for this Edit.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("subtitles")]
        public virtual System.Collections.Generic.IList<string> Subtitles { get; set; } 

        /// <summary>Title-level EIDR ID. Example: "10.5240/1489-49A2-3956-4B2D-FE16-5".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("titleLevelEidr")]
        public virtual string TitleLevelEidr { get; set; } 

        /// <summary>Google-generated ID identifying the trailer linked to the Edit. Example: 'bhd_4e_cx'</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("trailerId")]
        public virtual string TrailerId { get; set; } 

        /// <summary>Edit type, like Movie, Episode or Season.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>Google-generated ID identifying the video linked to the Edit. Example: 'gtry456_xc'</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("videoId")]
        public virtual string VideoId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
